3. 小结

1、修饰符static可以修饰什么?
属性、方法、代码块、内部类

2、实例初始化方法由哪些部分组成?
(1)非静态属性的显式赋值
(2)非静态代码块的内容
(3)构造器中的代码
其中(1)和(2)是按顺序执行,(3)在最后

3、一个类有几个实例初始化方法有什么决定?
类中有n个构造器就有对应的n个实例初始化方法。

4、实例初始化方法的执行特点?
(1)每次创建对象时执行,执行哪个实例初始化方法看程序员调用哪个构造器
(2)如果创建子类的对象,会先执行父类的对应的实例初始化方法,执行哪个父类的实例初始化方法看子类的构造器中调用父类的哪个构造器

5、类初始化由哪些部分组成?
(1)静态属性的显式赋值
(2)静态代码块的内容
(1)和(2)是按顺序执行

6、一个类有几个类初始化方法?
一个类只有一个类初始化方法

7、类初始化方法的执行特点?
(1)在类初始化时执行,先于创建对象,即先于实例初始化方法
(2)一个类的初始化方法只会执行一次
(3)如果在初始化子类时,发现父类还没有初始化,会先初始化父类

8、==与equals()的区别?equals()方法的重写要注意哪些问题?
==:如果是基本数据类型,那么比较的是数据值;如果是引用数据类型,那么比较的是地址值。
equals:用于引用数据类型的比较,如果没有重写Object类中的equals,那么也是比较地址值,如果子类重写了equals方法,那么比较属性的内容。

9、equals()方法的重写要注意哪些问题:
(1)equals方法的重写要与hashCode一起重写
(2)equals方法的重写要遵循几个原则:自反性、对称性、传递性、一致性、非空对象与null比较返回false

10、静态变量与实例变量的区别?
(1)存储值的位置不同
静态变量:方法区
实例变量:堆
(2)初始化的时机不同
静态变量:在类初始化时完成
实例变量:每次创建对象时
(3)共享性
静态变量:每个对象共享,独立于任何对象
实例变量:每个对象是独立的
(4)生命周期
静态变量:和类一样
实例变量:每个对象的实例变量与这个对象的生命周期一样
(5)get/set
静态变量:get/set也是静态的,如果局部变量与静态变量重名,可以用“类名.”
实例变量:get/set是非静态的,如果局部变量与静态变量重名,可以用“this.”

11、变量的分类:
(1)按照数据类型分
基本数据类型的变量与引用数据类型的变量
基本数据类型的变量中存数据值;引用数据类型的变量中存地址值
(2)按声明的位置不同
局部变量和成员变量
局部变量:(1)形参(2)方法体(3)代码块中
成员变量:类中方法和代码块外面

多态只针对方法而言,属性没有多态,属性只看编译时的类型。例如,下面程序输出结果为1